This adds names to mutexes. This seemed like a nice debugging
authorTom Tromey <tromey@redhat.com>
Wed, 15 Aug 2012 19:14:14 +0000 (13:14 -0600)
committerTom Tromey <tromey@redhat.com>
Wed, 15 Aug 2012 19:14:14 +0000 (13:14 -0600)
extension.

src/print.c
src/thread.c
src/thread.h

index 42e7241ecbac825951b35b14c15f44bcad8ac1ba..b14a769dc74b69ab464acbf95aecbd2736463329 100644 (file)
@@ -1957,10 +1957,14 @@ print_object (Lisp_Object obj, register Lisp_Object printcharfun, int escapeflag
        }
       else if (MUTEXP (obj))
        {
-         int len;
          strout ("#<mutex ", -1, -1, printcharfun);
-         len = sprintf (buf, "%p", XMUTEX (obj));
-         strout (buf, len, len, printcharfun);
+         if (STRINGP (XMUTEX (obj)->name))
+           print_string (XMUTEX (obj)->name, printcharfun);
+         else
+           {
+             int len = sprintf (buf, "%p", XMUTEX (obj));
+             strout (buf, len, len, printcharfun);
+           }
          PRINTCHAR ('>');
        }
       else
index 80557e5d5eef9cac6b9983809f06ca1f87284871..9ec418f9871f245648d9d6d8c76a1306806c3239 100644 (file)
@@ -39,16 +39,9 @@ Lisp_Object Qthreadp, Qmutexp;
 
 \f
 
-struct Lisp_Mutex
-{
-  struct vectorlike_header header;
-
-  lisp_mutex_t mutex;
-};
-
-DEFUN ("make-mutex", Fmake_mutex, Smake_mutex, 0, 0, 0,
+DEFUN ("make-mutex", Fmake_mutex, Smake_mutex, 0, 1, 0,
        doc: /* FIXME */)
-  (void)
+  (Lisp_Object name)
 {
   struct Lisp_Mutex *mutex;
   Lisp_Object result;
@@ -57,6 +50,7 @@ DEFUN ("make-mutex", Fmake_mutex, Smake_mutex, 0, 0, 0,
   memset ((char *) mutex + offsetof (struct Lisp_Mutex, mutex),
          0, sizeof (struct Lisp_Mutex) - offsetof (struct Lisp_Mutex,
                                                    mutex));
+  mutex->name = name;
   lisp_mutex_init (&mutex->mutex);
 
   XSETMUTEX (result, mutex);
@@ -107,6 +101,18 @@ DEFUN ("mutex-unlock", Fmutex_unlock, Smutex_unlock, 1, 1, 0,
   return Qnil;
 }
 
+DEFUN ("mutex-name", Fmutex_name, Smutex_name, 1, 1, 0,
+       doc: /* FIXME */)
+  (Lisp_Object obj)
+{
+  struct Lisp_Mutex *mutex;
+
+  CHECK_MUTEX (obj);
+  mutex = XMUTEX (obj);
+
+  return mutex->name;
+}
+
 void
 finalize_one_mutex (struct Lisp_Mutex *mutex)
 {
@@ -542,6 +548,7 @@ syms_of_threads (void)
   defsubr (&Smake_mutex);
   defsubr (&Smutex_lock);
   defsubr (&Smutex_unlock);
+  defsubr (&Smutex_name);
 
   Qthreadp = intern_c_string ("threadp");
   staticpro (&Qthreadp);
index d3ec38a22b922c8e93ec584e9e6e7e60aa367cb4..1a193b1e4ae82c8739c7418b694171f8f8101320 100644 (file)
@@ -168,7 +168,14 @@ struct thread_state
   struct thread_state *next_thread;
 };
 
-struct Lisp_Mutex;
+struct Lisp_Mutex
+{
+  struct vectorlike_header header;
+
+  Lisp_Object name;
+
+  lisp_mutex_t mutex;
+};
 
 extern struct thread_state *current_thread;